package utils;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;

import java.util.Enumeration;
import java.util.Properties;


/**
 * Se encarga de leer el archivo de configuraci�n y tener una �nica instancia disponible para toda la aplicaci�n.
 * Se presupone que el archivo de propiedades est� en la raiz del proyecto.
 */


public class  Propiedades implements Serializable{
    
    private final static String DEFAULT_PROPERTIES="irestaurant.properties";
    private String archivo = DEFAULT_PROPERTIES;
    private Properties propiedades;
//    private static Logger log = Logger.getLogger(Propiedades.class);
    private static Propiedades instance;
    private final static long DEFAULT_CHECK_PERIOD=60000;

    /**
     * Constructor con el archivo por defecto indicado en la clase
     */
    protected Propiedades() {
        this(DEFAULT_PROPERTIES);
    }

    /**
     * Constructor con el nombre del archivo como par�metro
     * @param archivo Nombre sin extensi�n del archivo .properties
     */
    protected Propiedades(String archivo) {
        this.archivo = archivo;
        cargarPropiedades();
               
    }

    /**
     * Carga las propiedades del archivo
     */
    
     private void cargarPropiedades(){
         propiedades=new Properties();
         InputStream in;
         try {
            in = getClass().getClassLoader().getResourceAsStream(archivo);
             propiedades.load(in);
             in.close();
         }
         catch (IOException e) {
            
         }
             
     }
    

    /**
     * Obtiene la instancia en memoria. Si no existe, se crea. Patr�n de dise�o Singleton.
     * Constructor con el nombre del archivo como par�metro
     * @param archivo Nombre sin extensi�n del archivo .properties
     * @return Un objeto de tipo Propiedades.
     */
    public static Propiedades create(String archivo) {
        return new Propiedades(archivo);
    }
    
    /**
     * Obtiene la instancia en memoria. Si no existe, se crea. Patr�n de dise�o Singleton.
     * @return Un objeto de tipo Propiedades.
     */
    public static Propiedades getInstance() {
        if (instance == null){
            instance = new Propiedades();
        }
        return instance;
    }
    
    /**
     * Devuelve el valor de una clave, es decir, devuelve una propiedad.
     * @param clave Nombre de la propiedad.
     * @return Valor de la propiedad.
     */
    public String getPropiedad (String clave){
        String aux="";
        aux=propiedades.getProperty(clave);
        if (aux==null || aux.equals(""))
          return null;
        return aux;
    }
    /**
     * Devuelve el conjunto completo de propiedades
     * @return pares atributo valor
     */
    public Properties getPropiedades(){
        return propiedades;
    }
    
    public void changeFile(String fileName) {
        
        cargarPropiedades();
        
    }
}
